﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Capa_Entidad;

namespace Acceso_Datos.Clases_DAO
{
    public class clsAte_AtencionDAO
    {
         BDClinicaEntities ContextoDeObjs = new BDClinicaEntities();
   
        public bool Insertar(ATE_ATENCION Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("ATE_ATENCION", Obj);
                ContextoDeObjs.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        public int obtenerIdAtencion()
        {
            int ultimaAtencion = 0;
            try
            {
                var query = (from ate in ContextoDeObjs.ATE_ATENCION
                             select ate.ATE_ID_ATENCION).DefaultIfEmpty(0).Max();
                ultimaAtencion = Convert.ToInt16(query) + 1;
                return ultimaAtencion;

            }
            catch (Exception)
            {

            }
            return ultimaAtencion;
        }
        public bool Modificar(ATE_ATENCION obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("ATE_ATENCION", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;

            }
        }
        public bool Eliminar(ATE_ATENCION obj)
        {
            try
            {
               // ContextoDeObjs.Exe
                ContextoDeObjs.AttachTo("ATE_ATENCION", obj);
                ContextoDeObjs.DeleteObject(obj);
                ContextoDeObjs.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        public List<ATE_ATENCION> Listar()
        {
            try
            {
                List<ATE_ATENCION> lista = new List<ATE_ATENCION>();
                var q = (from c in ContextoDeObjs.ATE_ATENCION
                        select c).OrderByDescending(c =>c.ATE_ID_ATENCION);
                lista = q.ToList();
                return lista;
            }
            catch (Exception)
            {
                return null;
            }
        }
        public ATE_ATENCION obtenerUltimaAtencion() {
            ATE_ATENCION ultimaAtencion;
            try
            {
                var query=from ate in ContextoDeObjs.ATE_ATENCION
                        select ate;
                ultimaAtencion=query.ToList().Last();
                
            }catch(Exception){
                ultimaAtencion = null;
            }
            return ultimaAtencion;
        }
        public IEnumerable<object> ListarCitasPendientes(){
            try
            {
                var q = from c in ContextoDeObjs.ADM_CITA
                        join p in ContextoDeObjs.ADM_PACIENTE on c.PAC_ID_PACIENTE equals p.PAC_ID_PACIENTE
                        join ce in ContextoDeObjs.CIT_ESTADO_CITA on c.ESC_ID_ESTADO_CITA equals ce.ESC_ID_ESTADO_CITA
                        join at in ContextoDeObjs.ATE_ATENCION on c.CIT_ID_CITA equals at.CIT_ID_CITA
                        join pp in ContextoDeObjs.PRM_PROGRAMACION_MEDICA on c.PRM_ID_PROGRAMACION equals pp.PRM_ID_PROGRAMACION
                        join ph in ContextoDeObjs.PRM_HORARIO on pp.HOR_ID equals ph.HOR_ID
                        orderby c.CIT_FECHA descending, ph.HOR_HORARIO ascending
                        where c.ESC_ID_ESTADO_CITA=="1"
                        select new { c.CIT_ID_CITA, c.CIT_FECHA, ph.HOR_HORARIO, c.PAC_ID_PACIENTE, paciente = p.PAC_NOMBRES + " " + p.PAC_APELLIDO_PATERNO + " " + p.PAC_APELLIDO_MATERNO, ce.ESC_DESCRIPCION,c.CIT_OBSERVACION, at.ATE_ID_ATENCION };
                return q;
            }
            catch {
                return null;
            }
           
        }
        public List<V_LISTA_HISTORIAL_PACIENTE> ListarNumHistorial(int IdPaciente) {
            List<V_LISTA_HISTORIAL_PACIENTE> lista = new List<V_LISTA_HISTORIAL_PACIENTE>();
            try {
                var q = from c in ContextoDeObjs.V_LISTA_HISTORIAL_PACIENTE
                        where c.PAC_ID_PACIENTE == IdPaciente
                        select c;
                lista = q.ToList();
                return lista;
            }
            catch(Exception ex) {
                return lista;
            }
        }
        public List<ATE_ATENCION> ListarAtencionxpaciente(int IdPaciente)
        {
            List<ATE_ATENCION> lista = new List<ATE_ATENCION>();
            try
            {
                var q = from c in ContextoDeObjs.ATE_ATENCION
                        where c.PAC_ID_PACIENTE ==IdPaciente 
                        select c;
                lista = q.ToList();
                return lista;
            }
            catch (Exception ex){
                return lista;
            }
        }

  
    }
}
